package com.md.model.excel;

import lombok.Data;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.xssf.model.StylesTable;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;

import java.util.ArrayList;
import java.util.List;

import static com.md.util.ExcelUtil.getBorderCtColor;

/**
 * @author 刘骄阳
 * 2024-05-14 1:24
 */
@Data
public class CellStyleInfo {
  /**
   * 字体样式
   */
  private CellFontStyleInfo fontStyle;

  /**
   * 水平对齐方式
   */
  private HorizontalAlignment horizontalAlignment;

  /**
   * 垂直对齐方式
   */
  private VerticalAlignment verticalAlignment;

  /**
   * 边框样式
   */
  private BorderGroup borderGroup;

  /**
   * 前景色(通常指文字颜色;但是需要看一下区别)
   */
  private ExcelColorInfo foregroundColor;

  /**
   * 背景色
   */
  private ExcelColorInfo backgroundColor;

  /**
   * 旋转角度
   */
  private Integer rotation;

  /**
   * 单元格内文本的样式
   */
  private List<CellFontStyleInfo> cellContentStyleList;


  public static CellStyleInfo readCellStyle(final XSSFCell cell, final StylesTable stylesTable) {
    CellStyleInfo cellStyleInfo = new CellStyleInfo();
    XSSFCellStyle cellStyle = cell.getCellStyle();
    // 字体样式
    cellStyleInfo.setFontStyle(CellFontStyleInfo.readFontStyle(cell, stylesTable));
    // 水平对齐方式
    cellStyleInfo.setHorizontalAlignment(cellStyle.getAlignment());
    // 垂直对齐方式
    cellStyleInfo.setVerticalAlignment(cellStyle.getVerticalAlignment());
    // 边框
    cellStyleInfo.setBorderGroup(BorderGroup.readBorder(cellStyle, stylesTable));
    // 填充(前景色?和背景色)
    cellStyleInfo.setForegroundColor(ExcelColorInfo.getColorInfo(
      getBorderCtColor(cellStyle.getFillForegroundXSSFColor()), stylesTable));
    cellStyleInfo.setBackgroundColor(ExcelColorInfo.getColorInfo(
      getBorderCtColor(cellStyle.getFillBackgroundXSSFColor()), stylesTable));
    // 旋转角度?
    cellStyleInfo.setRotation((int) cellStyle.getRotation());
    if (cell.getCellType() == CellType.STRING) {
      cellStyleInfo.setCellContentStyleList(CellFontStyleInfo.readFontStyle(cell.getRichStringCellValue(), stylesTable,
        cellStyleInfo.getFontStyle()));
    } else {
      List<CellFontStyleInfo> cellContentStyleList = new ArrayList<>();
      cellContentStyleList.add(cellStyleInfo.getFontStyle());
      cellStyleInfo.setCellContentStyleList(cellContentStyleList);
    }
    return cellStyleInfo;

  }

  public static void main(String[] args) {
    System.out.println(new CellStyleInfo());
  }
}
